package com.service.infoEntry.service;

import com.service.config.utils.Result;
import com.service.infoEntry.dto.TeamInfoDto;
import com.service.infoEntry.entity.TeamInfo;
import com.service.infoEntry.entity.TeamUser;
import com.service.infoEntry.vo.RoleVo;
import com.service.infoEntry.vo.TeamVo;
import com.service.infoEntry.vo.UserVo;

import java.util.List;
import java.util.Map;

public interface TeamService {

    /**
     * 创建团队
     * @param teamInfoDto
     */
    void createTeam(TeamInfoDto teamInfoDto,String creatorId);

    /**
     * 往团队中添加用户
     * @return
     */
    Result addUser2Team(String teamId, String userId, String adderId);

    /**
     *
     * @param teamId 团队id
     * @param userId 被移除用户id
     */
    Result removeUserFromTeam(String teamId,Integer currentUserRole, String userId);

    /**
     * 团队创建者给团队添加管理员
     * @param teamId 团队id
     * @param userId 管理员id
     */
    Result addAdminInTeam(String teamId, String userId);

    Result removeAdminInTeam(String teamId, String userId);

    Integer checkUserAuthority(String userId, String teamId);

    /**
     * 查询用户所在的所有团队
     * @param userId
     * @return
     */
    List<TeamInfo> queryTeams(String userId);

    /**
     * 查询用户所有团队
     * @param userId
     * @return
     */
    List<TeamVo> queryTeamsWithRole(String userId);

    /**
     * 查询团队中的所有用户
     * @param teamId
     * @return
     */
    Map<String,Object> queryAllUserInTeam(String teamId, String userId, Integer page);

    /**
     * 解散团队
     * @param teamId
     * @return
     */
    Result removeTeam(String teamId);

    Integer checkTeamIsExist(String teamId);

    /**
     * 管理员转移权限给普通用户
     * @param teamId
     * @param id
     * @param username
     * @return
     */
    Result changeAdmin(String teamId, String id, String username);

    /**
     * 普通用户和管理员用户退出团队
     * @param teamId
     * @param id
     * @return
     */
    Result exitTeam(String teamId, String id);

    RoleVo queryRoleInTeam(String userIUd,String teamId);

    /**
     * 当前用户在当前团队中的所有权限
     * @param teamId
     * @param userId
     * @return
     */
    RoleVo queryPermissionsInTeam(String teamId, String userId);

    /**
     * 通过teamId查询team
     * @param teamId
     * @return
     */
    TeamVo queryTeamByTeamId(String teamId);

    /**
     * 切换团队
     * @param teamId
     * @param userId
     */
    TeamVo changeTeam(String teamId, String userId);

    List<TeamInfo> queryAllTeam(TeamInfo teamInfo);

    List<TeamUser> queryAllUser();
}
